package com.kcwx.common.utils;

import org.apache.commons.lang3.StringUtils;

/**密码校验*/
public class PwdCheckUtil {

	// 定义特殊字符
	public static String SPECIAL_CHAR = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";

	/**
	 * &#064;brief  检测密码中字符长度
	 * @param password 密码字符串
	 * @param minNum 最小密码长度
	 * @param maxNum 最大密码长度
	 * @return 符合长度要求 返回true
	 */
	public static boolean checkPasswordLength(String password, String minNum, String maxNum) {
		boolean flag = false;
		if (StringUtils.isBlank(maxNum)) {
			minNum = StringUtils.isBlank(minNum) ? "0" : minNum;
			if (password.length() >= Integer.parseInt(minNum)) {
				flag = true;
			}
		} else {
			minNum = StringUtils.isBlank(minNum) ? "0" : minNum;
			if (password.length() >= Integer.parseInt(minNum) && password.length() <= Integer.parseInt(maxNum)) {
				flag = true;
			}
		}
		return flag;
	}

	/**
	 * &#064;brief  检测密码中是否包含数字
	 * @param password 密码字符串
	 * @return 包含数字 返回true
	 */
	public static boolean checkContainDigit(String password) {
		char[] chPass = password.toCharArray();
        for (char pass : chPass) {
            if (Character.isDigit(pass)) {
                return true;
            }
        }
		return false;
	}

	/**
	 * &#064;brief  检测密码中是否包含字母（不区分大小写）
	 * @param password 密码字符串
	 * @return 包含字母 返回true
	 */
	public static boolean checkContainCase(String password) {
		char[] chPass = password.toCharArray();
        for (char pass : chPass) {
            if (Character.isLetter(pass)) {
                return true;
            }
        }
		return false;
	}

	/**
	 * &#064;brief  检测密码中是否包含小写字母
	 * @param password 密码字符串
	 * @return 包含小写字母 返回true
	 */
	public static boolean checkContainLowerCase(String password) {
		char[] chPass = password.toCharArray();
        for (char pass : chPass) {
            if (Character.isLowerCase(pass)) {
                return true;
            }
        }
		return false;
	}

	/**
	 * &#064;brief  检测密码中是否包含大写字母
	 * @param password 密码字符串
	 * @return 包含大写字母 返回true
	 */
	public static boolean checkContainUpperCase(String password) {
		char[] chPass = password.toCharArray();
        for (char pass : chPass) {
            if (Character.isUpperCase(pass)) {
                return true;
            }
        }
		return false;
	}

	/**
	 * &#064;brief  检测密码中是否包含特殊符号
	 * @param password 密码字符串
	 * @return 包含特殊符号 返回true
	 */
	public static boolean checkContainSpecialChar(String password) {
		char[] chPass = password.toCharArray();
        for (char pass : chPass) {
            if (SPECIAL_CHAR.indexOf(pass) != -1) {
                return true;
            }
        }
		return false;
	}

	/**
	 * &#064;brief  检测密码复杂度是否为 强
	 * @param pwd 密码字符串
	 * @param minNum 最小密码长度
	 * @param maxNum 最大密码长度
	 * @return 符合长度要求 返回true
	 */
	public static boolean checkStrongPwd(String pwd, String minNum, String maxNum) {
		try {
			if (!checkPasswordLength(pwd, minNum, maxNum) || !checkContainLowerCase(pwd)
				||!checkContainUpperCase(pwd)	|| !checkContainDigit(pwd) || !checkContainSpecialChar(pwd)) {
				return false;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return true;
	}
}
